Splice

对输入数据按给定上下文索引进行拼接操作,将多行特征数据按指定索引映射拼接到输出中。通常用于声学模型或时间序列模型的上下文扩展。

输入:
  • src_data - 输入数据地址。

  • src_row - 输入行数。

  • src_col - 输入列数。

  • dst_row - 输出行数。

  • dst_col - 输出列数。

  • context_dim - 上下文维度,即每行需要拼接的上下文数量。

  • forward_indexes - 上下文索引数组。

  • forward_indexes_dims - 上下文索引数组长度。

  • core_mask - 核掩码(仅适用于共享存储版本)。

输出:
  • dst_data - 拼接后的输出数据地址。

支持平台:

FT78NE MT7004

备注

  • FT78NE 支持fp, dp, int8, int16, int32, clx64, cplx128

  • MT7004 支持hp, fp, i16, i32, cplx64

共享存储版本:

void fp_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, float *src_data, float *dst_data, int core_mask)
void hp_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, half *src_data, half *dst_data, int core_mask)
void dp_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, double *src_data, double *dst_data, int core_mask)
void i8_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int8_t *src_data, int8_t *dst_data, int core_mask)
void i16_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int16_t *src_data, int16_t *dst_data, int core_mask)
void i32_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int *src_data, int *dst_data, int core_mask)
void c64_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, float *src_data, float *dst_data, int core_mask)
void c128_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, double *src_data, double *dst_data, int core_mask)

C调用示例:

 1#include <stdio.h>
 2#include <splice.h>
 3
 4int main() {
 5    float *input = (float *)0xA0000000;    // 输入在DDR空间
 6    float *output = (float *)0xC0000000;
 7    int src_row = 100, src_col = 64;
 8    int dst_row = 100, dst_col = 64*3;
 9    int context_dim = 3;
10    int forward_indexes[300];              // 举例
11    int forward_indexes_dims = 300;
12    int core_mask = 0xff;
13
14    fp_splice_s(src_row, src_col, dst_row, dst_col, context_dim, forward_indexes_dims, forward_indexes, input, output, core_mask);
15    return 0;
16}

私有存储版本:

void fp_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, float *src_data, float *dst_data)
void hp_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, half *src_data, half *dst_data)
void dp_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, double *src_data, double *dst_data)
void i8_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int8_t *src_data, int8_t *dst_data)
void i16_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int16_t *src_data, int16_t *dst_data)
void i32_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int *src_data, int *dst_data)
void c64_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, float *src_data, float *dst_data)
void c128_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, double *src_data, double *dst_data)

C调用示例:

 1#include <stdio.h>
 2#include <splice.h>
 3
 4int main() {
 5    float *input = (float *)0x10810000;    // 输入在L2空间
 6    float *output = (float *)0x10820000;
 7    int src_row = 100, src_col = 64;
 8    int dst_row = 100, dst_col = 64*3;
 9    int context_dim = 3;
10    int forward_indexes[300];              // 举例
11    int forward_indexes_dims = 300;
12
13    fp_splice_p(src_row, src_col, dst_row, dst_col, context_dim, forward_indexes_dims, forward_indexes, input, output);
14    return 0;
15}